import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();

// 数据源
const familyNames = ['王', '李', '张', '刘', '陈', '杨', '赵', '黄', '周', '吴', '徐', '孙', '马', '朱', '胡', '林', '郭', '何', '高', '罗'];
const maleNames = ['建国', '志强', '伟', '勇', '军', '磊', '涛', '斌', '强', '鹏', '杰', '清', '亮', '飞', '鸿', '浩', '宇', '学', '诚', '信'];
const femaleNames = ['芳', '娜', '敏', '静', '秀英', '颖', '红', '婷', '玲', '芬', '兰', '娟', '莉', '萍', '玉', '娥', '琴', '珍', '燕', '文'];
const cities = ['北京', '上海', '广州', '深圳', '杭州', '南京', '成都', '武汉', '西安', '重庆', '长沙', '青岛', '厦门', '大连', '苏州', '天津', '郑州', '哈尔滨', '沈阳', '济南'];
const provinces = ['河北', '山东', '江苏', '浙江', '广东', '福建', '四川', '湖南', '湖北', '河南', '山西', '陕西', '安徽', '江西', '云南', '贵州', '辽宁', '吉林', '黑龙江', '海南'];
const ranks = ['初级工程师', '中级工程师', '高级工程师', '技术主管', '项目经理', '部门经理', '产品经理', '运维工程师', 'UI设计师', '前端开发', '后端开发', '全栈工程师', '测试工程师', '数据分析师', '人力资源专员', '财务会计', '市场专员', '销售经理', '客户经理', '行政专员'];
const units = ['技术研发部', '产品设计部', '市场营销部', '运营管理部', '人力资源部', '财务部', '行政部', '客户服务部', '销售部', '战略发展部'];
const statuses = ['在职', '离职', '休假', '实习'];

// 生成随机日期字符串 (YYYY-MM-DD)
function randomDate(start, end) {
  const startDate = new Date(start).getTime();
  const endDate = new Date(end).getTime();
  const randomTime = startDate + Math.random() * (endDate - startDate);
  const date = new Date(randomTime);
  
  const year = date.getFullYear();
  const month = String(date.getMonth() + 1).padStart(2, '0');
  const day = String(date.getDate()).padStart(2, '0');
  
  return `${year}-${month}-${day}`;
}

// 随机选择数组中的一个元素
function randomPick(array) {
  return array[Math.floor(Math.random() * array.length)];
}

// 随机生成电话号码
function randomPhone() {
  const prefixes = ['138', '139', '137', '136', '135', '134', '159', '158', '157', '188', '187', '186', '130', '131', '132', '156'];
  const prefix = randomPick(prefixes);
  const suffix = Math.floor(Math.random() * 10000000).toString().padStart(7, '0');
  return `${prefix}${suffix}`;
}

// 生成随机分数 (70-100)
function randomScore() {
  return Math.floor(Math.random() * 31) + 70;
}

// 生成随机人员数据
function generateRandomPerson() {
  const gender = Math.random() > 0.5 ? '男' : '女';
  const familyName = randomPick(familyNames);
  const givenName = gender === '男' ? randomPick(maleNames) : randomPick(femaleNames);
  const name = familyName + givenName;
  
  const province = randomPick(provinces);
  const city = randomPick(cities);
  const hometown = `${province}${city}`;
  
  // 80%的几率有分数
  const hasScore = Math.random() < 0.8;
  return {
    name,
    gender,
    birthDate: randomDate('1980-01-01', '2000-12-31'),
    hometown,
    rank: randomPick(ranks),
    unit: randomPick(units),
    status: randomPick(statuses),
    employmentDate: randomDate('2010-01-01', '2023-09-30'),
    contact: randomPhone(),
    score: hasScore ? randomScore() : null
  };
}

// 生成50条随机数据
function generateRandomPeople(count = 100) {
  const people = [];
  for (let i = 0; i < count; i++) {
    people.push(generateRandomPerson());
  }1213
  return people;
}

async function main() {
  console.log('开始初始化人员数据...');
  
  try {
    // 生成50条随机数据
    const randomPeople = generateRandomPeople(50);
    
    // 插入随机数据1213
    for (const person of randomPeople) {
      console.log(`新增人员: ${person.name}`);
      await prisma.people.create({
        data: person
      });
    }
    
    console.log('人员数据初始化完成！共生成50条随机数据');
  } catch (error) {
    console.error('初始化过程中发生错误:', error);
    throw error;
  }
}

// 执行初始化
main()
  .catch(e => {
    console.error('数据初始化失败:', e);
    process.exit(1);
  })
  .finally(async () => {
    await prisma.$disconnect();
  }); 